package com.albertyjz.juc;

import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.stream.Collectors;

//集合类是不安全的，先用ArrayList或hashset，hashmap。多了会出现异常ConcurrentModificationException（并发修改异常）
//解决1。用arraylist的前身vector,因为vector的add方法是加了锁的。但是性能会降低。
//解决2.用collection.synchronizedList()
//解决3.用juc下的CopyOnWriteArrayList（写时复制的容器）。读一下他的add源码，最好是java8的。读写分离，提高效率，读的时候不加锁，并发的读
// 写的时候加锁，不是直接在object[]中添加元素，而是将当前容器进行copy，复制一个新的容器，添加好后在setArray原容器指向新容器。


public class NotSafeDemo {
    public static void main(String[] args) {
        //List<String> list= new Vector<>();
        //List<String> list= Collections.synchronizedList(new ArrayList<>());
        List<String> list=new CopyOnWriteArrayList<>();
        Map<String,String> map=new ConcurrentHashMap();
        for(int i=1;i<=30000;i++){
            new Thread(()->{
                list.add(UUID.randomUUID().toString().substring(0,8));
                map.put(Thread.currentThread().getName(),UUID.randomUUID().toString().substring(0,8));
                System.out.println(map);
            },i+"").start();
        }
    }
}
